生成AI(Claude 3.5 Sonnet)を使って、画像のモデレーションが可能かどうかを検証してみた
こんちには。
データ事業本部 インテグレーション部 機械学習チームの中村( @nokomoro3 )です。
今回は画像を入力できる生成AI(Claude 3.5 Sonnet)を使って、画像のモデレーションが可能かどうかを検証します。
使用するコード
まずは画像とテキストをリクエストできる関数を作成しておきます。
import boto3
from botocore.config import Config
def request_claude_with_image(user_message: str, image_name: str, system_prompt: str=""):
image_name = image_name
MODEL_ID = "anthropic.claude-3-5-sonnet-20240620-v1:0"
config = Config(
region_name='us-east-1',
connect_timeout=300,
read_timeout=300,
retries={'max_attempts': 3}
)
session = boto3.Session(region_name="us-east-1", profile_name="mlteam")
bedrock_runtime = session.client(service_name="bedrock-runtime", config=config)
with open(image_name, "rb") as f:
image = f.read()
user_message = user_message
messages = [
{
"role": "user",
"content": [
{"image": {"format": "png", "source": {"bytes": image}}},
{"text": user_message},
],
}
]
kwargs = {
"modelId": MODEL_ID,
"messages": messages,
}
if len(system_prompt) > 0:
kwargs = {**kwargs, "system": [{ "text": system_prompt }]}
response = bedrock_runtime.converse(**kwargs)
response_text = response["output"]["message"]["content"][0]["text"]
return response_text
引数としては以下の3つが使用できます。
user_message
: ユーザの質問image_name
: 画像ファイル名system_prompt
: システム指示(任意)
レスポンスはテキストとして得られます。
オリジナル画像
以下のような画像を使用します。
まずはこの絵について説明してもらいます。
print(
request_claude_with_image(
user_message="この画像はどのようなキャラクターかを説明してください。",
image_name="icon-original.png"
)
)
この画像は、かわいい漫画風のクマのキャラクターを描いています。
キャラクターの特徴:
- 茶色の体
- 丸い耳
- 大きな白目に黒い瞳の目
- 頬に赤い丸い斑点
- にっこりとした笑顔
背景は明るい青色で、右上には黄色い線で描かれた人間の頭の輪郭と脳のようなシンボルが見えます。これは思考や知性を表しているようです。
全体的に、このイメージは子供向けのアプリケーションや教育的なコンテンツに使われそうな、親しみやすくて楽しげな雰囲気を醸し出しています。クマのキャラクターは知性や学習を象徴する要素と組み合わされており、おそらく子供の学習や発達に関連したコンセプトを表現しているのではないでしょうか。
処理対象の例
タバコを追加した場合
以下のようにオリジナル画像を左側に、右側に処理対象の画像を表示した絵を使います。
まずは違いを説明してもらいます。
print(
request_claude_with_image(
user_message="左側の絵が基準となるキャラクターです。右側の絵にはどのような違いが見られますか?",
image_name="icon-compare-sample1-smoking.png"
)
)
右側の絵には、以下の違いが見られます:
キャラクターが口にタバコを咥えています。これは左側の絵には見られない新しい要素です。
キャラクターの目から涙のようなものが流れています。これも左側の絵にはない特徴です。
両方の絵に共通する要素としては、茶色の動物のような顔、大きな白い目と黒い瞳、赤い頬、笑顔、そして右上隅にある黄色い頭脳のようなアイコンがあります。
全体的に、右側の絵は喫煙という行為を示しており、涙のような表現は、おそらくタバコの煙による目の刺激や、喫煙に関連する何らかの感情を表現しているようです。この変化は、喫煙の影響や健康への懸念を示唆している可能性があります。
更に、子供向けキャラクターとして有害かどうかを判定してもらいましょう(これが有害とされるべきかどうかの判断は今はおいておきます)。
print(
request_claude_with_image(
user_message="左側の絵が基準となるキャラクターです。右側の絵は子供向けキャラクターの絵として有害でしょうか?",
image_name="icon-compare-sample1-smoking.png"
)
)
この画像は非常に懸念すべきものです。子供向けのキャラクターがタバコを吸っている様子を描いており、これは明らかに不適切で有害です。
左側の元のキャラクターは愛らしく無害な印象ですが、右側のバージョンでタバコを加えることで、喫煙を肯定的に描写しています。これは子供たちに悪影響を与える可能性が高いです。
子供向けコンテンツでは、喫煙などの有害な行為を描くべきではありません。特に、かわいらしいキャラクターにそのような行為をさせることは、子供たちに誤ったメッセージを送る危険があります。
このようなイメージは、子供たちの健康と福祉を守る観点から、絶対に避けるべきです。子供向けコンテンツは教育的で、ポジティブな価値観を育むものであるべきです。
Claude 3.5 Sonnetとしては、子供向けキャラクターとしては不適切と判断したようです。
ビールを追加した場合
次は以下のような画像を使ってみます。
こちらも有害かどうかを判定してもらいましょう(これが有害とされるべきかどうかの判断は今はおいておきます)。
print(
request_claude_with_image(
user_message="左側の絵が基準となるキャラクターです。右側の絵は子供向けキャラクターの絵として有害でしょうか?",
image_name="icon-compare-sample2-beer.png"
)
)
この画像は、子供向けキャラクターとしては問題があると考えられます。
左側の絵は、愛らしい表情の茶色のクマのキャラクターを示しています。右側の絵は同じキャラクターですが、ビールのジョッキを持っています。
子供向けコンテンツにアルコール飲料を含めることは、以下の理由から適切ではありません:
- 子供たちにアルコールを肯定的に描写してしまう可能性があります。
- 未成年の飲酒を奨励しているように解釈される恐れがあります。
- アルコールに関する誤った印象を与える可能性があります。
子供向けキャラクターは、健全で教育的な要素を含むべきです。アルコールのような成人向けの要素は避け、代わりに果物やジュースなど子供に適した飲み物を描くほうが望ましいでしょう。
このようなデザインは、大人向けのユーモアやパロディーとしては機能するかもしれませんが、子供向けコンテンツとしては不適切です。子供たちの健全な発育を考慮し、より適切な表現を選ぶべきだと考えます。
こちらもClaude 3.5 Sonnetとしては、子供向けキャラクターとしては不適切と判断したようです。
サングラスを追加した場合
次は以下のような画像を使ってみます。
こちらも子供向けキャラクターとして有害かどうかを判定してもらいましょう(これが有害とされるべきかどうかの判断は今はおいておきます)。
print(
request_claude_with_image(
user_message="左側の絵が基準となるキャラクターです。右側の絵は子供向けキャラクターの絵として有害でしょうか?",
image_name="icon-compare-sample3-sunglass.png"
)
)
右側の絵は、基本的には左側と同じキャラクターですが、サングラスをかけているという違いがあります。子供向けキャラクターとしては、特に有害とは思えません。
サングラスを装着することで、キャラクターに少し「クール」な雰囲気が加わっていますが、笑顔は維持されており、友好的な印象は変わっていません。
両方の絵において、キャラクターの頭上には脳を表すようなアイコンが描かれており、これは知性や思考を象徴している可能性があります。
全体的に、このキャラクターの変化は穏やかで、子供向けコンテンツとして適切だと考えられます。サングラスの追加は、キャラクターに新しい側面を加えるクリエイティブな方法であり、有害というよりは、むしろ子供たちの想像力を刺激する可能性があります
Claude 3.5 Sonnetとしては、問題ないと判断したようです。
サングラスを追加した場合2
もう少し、いかついサングラスをかけさせてみます。
print(
request_claude_with_image(
user_message="左側の絵が基準となるキャラクターです。右側の絵は子供向けキャラクターの絵として有害でしょうか?",
image_name="icon-compare-sample3-sunglass2.png"
)
)
この画像は、子供向けキャラクターとしては問題ないと考えられます。
左側の絵は、シンプルで愛らしいクマのようなキャラクターを示しています。大きな目、赤い頬、そして優しい笑顔が特徴的です。
右側の絵は同じキャラクターですが、サングラスをかけているという違いがあります。サングラスをかけることで、キャラクターにクールさや個性が加わっていますが、基本的な表情や雰囲気は変わっていません。
子供向けキャラクターとして、この変化は特に有害とは言えません。むしろ、キャラクターに多様性や変化を持たせることで、子供たちの想像力を刺激し、楽しませる効果があるかもしれません。サングラスは日常的なアイテムであり、それ自体が不適切なものではありません。
両方の絵の上部には、脳のようなシンボルも描かれていますが、これも特に有害な要素ではなく、むしろ教育的な意味合いを持たせる意図があるかもしれません。
総合的に見て、このキャラクターの変化は子供向けとして適切で、むしろポジティブな要素を含んでいると言えるでしょう。
こちらもClaude 3.5 Sonnetとしては、問題ないと判断したようです。
システムプロンプトに指示を追加してみる
以下の画像のままですが、
system_prompt
に サングラスは威圧的な雰囲気があるアイテムです。サングラスは有害と見なしてください。
という指示を追加してみます。
print(
request_claude_with_image(
user_message="左側の絵が基準となるキャラクターです。右側の絵は子供向けキャラクターの絵として有害でしょうか?",
image_name="icon-compare-sample3-sunglass2.png",
system_prompt="サングラスは威圧的な雰囲気があるアイテムです。サングラスは有害と見なしてください。"
)
)
右側の絵は、基準となるキャラクターにサングラスを追加したものですが、子供向けキャラクターとしては適切でない可能性があります。
サングラスは、キャラクターの目を隠し、表情が読みづらくなることで、威圧的な印象を与える可能性があります。また、サングラスは時に大人っぽさや冷たさを感じさせるアイテムで、これは子供向けキャラクターの親しみやすさや温かみを損なう可能性があります。
さらに、子供向けのキャラクターは通常、目を通して感情を表現することが多いため、目を隠すサングラスは感情表現の幅を制限してしまう可能性があります。
したがって、右側の絵は子供向けキャラクターとしては適切でない要素を含んでおり、教育的な観点からも好ましくない印象を与える可能性があります。子供向けキャラクターは、オープンで親しみやすい表情を持つことが望ましいでしょう。
指示をするとClaude 3.5 Sonnetとしては、子供向けキャラクターとしては不適切と判断するように変化しました。
ご参考
最後に、オリジナルの画像であっても指示を加えれば有害と判定してくれるか試してみました。
print(
request_claude_with_image(
user_message="この絵は有害ですか?",
image_name="icon-original.png",
system_prompt="クマは人を襲うこともあるため多くの人にとって恐怖の対象です。たとえキャラクターであってもクマは有害と見なしてください。"
)
)
この画像自体に直接的な有害性はありませんが、クマのキャラクターを含む描写は注意が必要です。クマは野生動物として危険な面もあるため、現実のクマとの接触には十分な注意が必要です。この絵のようなかわいらしい表現が、現実のクマに対する誤った認識を生む可能性があります。子供たちには、クマは観察は楽しめても近づいてはいけない動物だということをしっかり教育する必要があります。画像の右上にある頭脳を表すようなシンボルは、クマに関する正しい知識を持つことの重要性を示唆しているようにも見えます。
あいまいな回答になってしまいました。ある程度プロンプトで判断基準を変更することはできますが、完全ではないケースもありそうです。
まとめ
いかがでしたでしょうか。今回は画像を入力できる生成AI(Claude 3.5 Sonnet)を使って、画像のモデレーションが可能かどうかを検証してみました。
感覚としてはある程度は可能な印象を受けました。本記事がご参考になれば幸いです。